import { ShaderPool } from "./shader/ShaderPool";
import { tag } from "./shader/tag";
import { ImageLoader } from "./loader/ImageLoader";
import { GLTFLoader } from "./loader/GLTFLoader";
import { textureLoader } from "./loader/TextureLoader";
/**
 * 资源加载类。
 * @memberof w
 */
class Res{
    constructor(){
        this.shaderPool=new ShaderPool();//缓存所有拼接后的着色器源码。
        this._imageLoader=new ImageLoader();//加载纹理资源。
        this._gltfLoader=new GLTFLoader();//加载gltf资源。
        this._textureLoader=textureLoader
    }
    /**
     * @property gltfLoader {GLTFLoader} 【只读】gltf加载类
     */
    get gltfLoader(){
        return this._gltfLoader;
    }
    /**
     * @property imageLoader {ImageLoader} 【只读】图片加载类
     */
    get imageLoader(){
        return this._imageLoader;
    }
    /**
     * @property textureLoader {TextureLoader} 【只读】纹理加载类
     */
    get textureLoader(){
        return this._textureLoader;
    }
    /**
     * 获取着色器代码
     * @param {String} name 着色器名称。
     * @param {Object} defs 宏定义对象。
     */
    getShader(name,defs){
        const source=this.shaderPool[name];
        if(!source){
            debugger
        }
        let code=tag(source,defs);
        code=code.replaceAll("!","$");
        code = new Function(`return ${JSON.stringify(code)};`)();
        code = code.replaceAll(/\s*\r?\n/g, "\n");//多行空行换成单行
        return code;
    }
    destroy(){
        this.shaderPool=null;
        this._imageLoader=null;
        this._gltfLoader=null;
        this._textureLoader.clear();
    }

}
export {Res}